//
// Created by wujehy on 2020/8/3.
//

#ifndef AUTH_RAFT_BUSINESSBASE_H
#define AUTH_RAFT_BUSINESSBASE_H

#include <functional>
//#include "../BusinessManager.h"

typedef std::function<int(int taskid, void *data, int len, void *userdata)> BusinessBaseEventFunction;

/**
 * @brief 业务模块基类
 * @tparam T
 */
template<class T>
class BusinessBase
{


public:
    /**
     * @brief 支持的业务模块类型
     */
    enum Type
    {
        Mod_Auth = 1, ///< 用户鉴权模块
        Mod_IoT = 2,
        Mod_Test = 3,
        Mod_Test2 = 4,
    };

    /**
     * @brief 被实现的 业务模块的类型
     * @return
     */
    virtual int type() = 0;

    /**
     * @brief 业务拆包接口
     * @param taskid 当前的任务上下文id
     * @param type_ 模块的子业务类型
     * @param data 收到的数据包
     * @param len  收到的数据包长度
     * @param userdata 用户数据
     * @return 放回执行结果状态
     */
    virtual int depackage(int taskid, int type_, void *data, int len, void *userdata = nullptr) = 0;

    /**
     * @brief 析钩器
     */
    virtual ~BusinessBase()
    {

    }

    /**
     * @brief 业务模块统一上下文
     */
    T *context = nullptr;   ///<用于存储 用户指定上下文

    /**
     * @brief 惰性加载 接口 ， 初始化完成后触发
     */
    virtual void init_finished() = 0;
};


#endif //AUTH_RAFT_BUSINESSBASE_H
